﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using Gra.Seguros.Servicio.Be;

namespace Gra.Seguros.Servicio.Dalc
{
    public class AdministrarComisionDalc : IDisposable
    {
        #region "Procedimientos Consultas"
            public List<AdministrarComisionBe> listarComisionesEmitidas(string _cGrupo)
            {
                try
                {
                    List<AdministrarComisionBe> lst = new List<AdministrarComisionBe>();
                    using (SqlCommand oCommand = new SqlCommand("uspListarComisionesEmitidas", oCn))
                    {
                        oCommand.CommandType = CommandType.StoredProcedure;
                        oCommand.Parameters.Add("@cGrupo", SqlDbType.NVarChar, 37).Value = _cGrupo;
                        using (SqlDataReader drListado = oCommand.ExecuteReader(CommandBehavior.SingleResult | CommandBehavior.CloseConnection))
                        {
                            if (drListado.HasRows)
                            {
                                while ((drListado.Read()))
                                {
                                    AdministrarComisionBe obj = new AdministrarComisionBe();
                                    obj.cPoliza = drListado.GetInt32(drListado.GetOrdinal("cPoliza"));
                                    obj.Aseguradora = new AseguradoraBe();
                                    obj.Aseguradora.dAseguradora = drListado.GetString(drListado.GetOrdinal("dAseguradora"));
                                    obj.fPagoPoliza = drListado.GetString(drListado.GetOrdinal("fPagoPoliza"));
                                    obj.nImpPrima = drListado.GetDecimal(drListado.GetOrdinal("nImpPrima"));
                                    obj.PCT = drListado.GetDecimal(drListado.GetOrdinal("PCT"));
                                    obj.nImpComision = drListado.GetDecimal(drListado.GetOrdinal("nImpComision"));
                                    lst.Add(obj);
                                }
                            }
                        }
                    }

                    return lst;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }

            public List<AdministrarComisionBe> listarComisionesNoEncontradas(string _cGrupo)
            {
                try
                {
                    List<AdministrarComisionBe> lst = new List<AdministrarComisionBe>();
                    using (SqlCommand oCommand = new SqlCommand("uspListarComisionesNoEncontradas", oCn))
                    {
                        oCommand.CommandType = CommandType.StoredProcedure;
                        oCommand.Parameters.Add("@cGrupo", SqlDbType.NVarChar, 37).Value = _cGrupo;
                        using (SqlDataReader drListado = oCommand.ExecuteReader(CommandBehavior.SingleResult | CommandBehavior.CloseConnection))
                        {
                            if (drListado.HasRows)
                            {
                                while ((drListado.Read()))
                                {
                                    AdministrarComisionBe obj = new AdministrarComisionBe();
                                    obj.cPoliza = drListado.GetInt32(drListado.GetOrdinal("cPoliza"));
                                    obj.Aseguradora = new AseguradoraBe();
                                    obj.Aseguradora.dAseguradora = drListado.GetString(drListado.GetOrdinal("dAseguradora"));
                                    obj.fPagoPoliza = drListado.GetString(drListado.GetOrdinal("fPagoPoliza"));
                                    obj.nImpPrima = drListado.GetDecimal(drListado.GetOrdinal("nImpPrima"));
                                    obj.PCT = drListado.GetDecimal(drListado.GetOrdinal("PCT"));
                                    obj.nImpComision = drListado.GetDecimal(drListado.GetOrdinal("nImpComision"));
                                    lst.Add(obj);
                                }
                            }
                        }
                    }

                    return lst;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }

            public List<AdministrarComisionBe> listarComisionesDiferentes(string _cGrupo)
            {
                try
                {
                    List<AdministrarComisionBe> lst = new List<AdministrarComisionBe>();
                    using (SqlCommand oCommand = new SqlCommand("uspListarComisionesDiferentes", oCn))
                    {
                        oCommand.CommandType = CommandType.StoredProcedure;
                        oCommand.Parameters.Add("@cGrupo", SqlDbType.NVarChar, 37).Value = _cGrupo;
                        using (SqlDataReader drListado = oCommand.ExecuteReader(CommandBehavior.SingleResult | CommandBehavior.CloseConnection))
                        {
                            if (drListado.HasRows)
                            {
                                while ((drListado.Read()))
                                {
                                    AdministrarComisionBe obj = new AdministrarComisionBe();
                                    obj.Ejecutivo = new EjecutivoBe();
                                    obj.Ejecutivo.dNombre = drListado.GetString(drListado.GetOrdinal("Ejecutivo"));
                                    obj.cPoliza = drListado.GetInt32(drListado.GetOrdinal("cPoliza"));
                                    obj.Aseguradora = new AseguradoraBe();
                                    obj.Aseguradora.dAseguradora = drListado.GetString(drListado.GetOrdinal("dAseguradora"));
                                    obj.fPagoPoliza = drListado.GetString(drListado.GetOrdinal("fPagoPoliza"));
                                    obj.nComision = drListado.GetDecimal(drListado.GetOrdinal("nComision"));
                                    obj.nImpComision = drListado.GetDecimal(drListado.GetOrdinal("nImpComision"));
                                    obj.nImpDiferencia = drListado.GetDecimal(drListado.GetOrdinal("nImpDiferencia"));
                                    lst.Add(obj);
                                }
                            }
                        }
                    }

                    return lst;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }

            public AdministrarComisionBe seleccionarDatosPoliza(int _cPoliza)
            {
                try
                {
                    AdministrarComisionBe obj = new AdministrarComisionBe();
                    using (SqlCommand oCommand = new SqlCommand("uspSeleccionarDatosPoliza", oCn))
                    {
                        oCommand.CommandType = CommandType.StoredProcedure;
                        oCommand.Parameters.Add("@cPoliza", SqlDbType.Int).Value = _cPoliza;
                        using (SqlDataReader drListado = oCommand.ExecuteReader(CommandBehavior.SingleResult | CommandBehavior.CloseConnection))
                        {
                            if (drListado.HasRows)
                            {
                                while ((drListado.Read()))
                                {
                                    obj.Ejecutivo = new EjecutivoBe();
                                    obj.Ejecutivo.dNombre = drListado.GetString(drListado.GetOrdinal("Ejecutivo"));
                                    obj.Ejecutivo.dCorreo = drListado.GetString(drListado.GetOrdinal("dCorreo"));
                                    obj.cPoliza = drListado.GetInt32(drListado.GetOrdinal("cPoliza"));
                                    obj.Aseguradora = new AseguradoraBe();
                                    obj.Aseguradora.dAseguradora = drListado.GetString(drListado.GetOrdinal("dAseguradora"));
                                    obj.fPagoPoliza = drListado.GetString(drListado.GetOrdinal("fPagoPoliza"));
                                    obj.nComision = drListado.GetDecimal(drListado.GetOrdinal("nComision"));
                                    obj.nImpComision = drListado.GetDecimal(drListado.GetOrdinal("nImpComision"));
                                    obj.nImpDiferencia = drListado.GetDecimal(drListado.GetOrdinal("nImpDiferencia"));
                                }
                            }
                        }
                    }

                    return obj;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        #endregion

        #region "Procedimientos Mantenimientos"
            public string cargarComisiones(int _cAseguradora, string _dArchivo)
            {
                string vReturn = string.Empty;
                try
                {
                    using (SqlCommand oCommand = new SqlCommand("uspCargarComisiones", oCn))
                    {
                        oCommand.CommandType = CommandType.StoredProcedure;
                        oCommand.Parameters.Add(new SqlParameter("@cAseguradora", SqlDbType.Int)).Value = _cAseguradora;
                        oCommand.Parameters.Add(new SqlParameter("@dArchivo", SqlDbType.NVarChar, 50)).Value = _dArchivo;
                        oCommand.Parameters.Add(new SqlParameter("@RETURN_VALUE", SqlDbType.VarChar, 500)).Direction = ParameterDirection.Output;
                        oCommand.ExecuteNonQuery();
                        vReturn = Convert.ToString(oCommand.Parameters["@RETURN_VALUE"].Value);
                    }
                    return vReturn;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        #endregion

        #region "Constructor & Disposable"
        private bool _disposed = false;
            SqlConnection oCn = null;
            public AdministrarComisionDalc()
            {
                string strConnection = ConfigurationManager.ConnectionStrings["dbSeguros"].ConnectionString;
                oCn = new SqlConnection(strConnection);
                oCn.Open();
            }

            public void Dispose()
            {
                Dispose(true);
                GC.SuppressFinalize(this);
            }
            protected virtual void Dispose(bool disposing)
            {
                if (!_disposed)
                {
                    if (disposing)
                    {
                        //Dispose managed resources here. llamar componetes de conexion u otros.                        
                        if (oCn.State != ConnectionState.Closed)
                        {
                            oCn.Close();
                        }
                        oCn.Dispose();
                    }
                    //Disposed unmanaged resources here.
                    //set the _disposed flag to prevent subsequent disposals.
                    _disposed = true;
                }
            }
            //Finalization code.
            ~AdministrarComisionDalc()
            {
                Dispose(false);
            }
        #endregion
    }
}
